package com.sky.skyopsserver.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.sky.skyopsserver.domain.ComputerRoom;
import com.sky.skyopsserver.vos.*;

import java.util.List;

/**
 * 机房信息服务接口
 * 
 * @author Administrator
 * @description 针对表【computer_room(机房信息表)】的数据库操作Service
 * @createDate 2025-09-13 17:43:04
 */
public interface ComputerRoomService extends IService<ComputerRoom> {

    /**
     * 添加机房
     * 
     * @param reqVO 添加机房请求VO
     * @return 机房ID
     */
    Long addComputerRoom(ComputerRoomAddReqVO reqVO);

    /**
     * 更新机房信息
     * 
     * @param reqVO 更新机房请求VO
     * @return 是否更新成功
     */
    Boolean updateComputerRoom(ComputerRoomUpdateReqVO reqVO);

    /**
     * 根据ID删除机房
     * 
     * @param id 机房ID
     * @return 是否删除成功
     */
    Boolean deleteComputerRoom(Long id);

    /**
     * 批量删除机房
     * 
     * @param ids 机房ID列表
     * @return 是否删除成功
     */
    Boolean batchDeleteComputerRoom(List<Long> ids);

    /**
     * 根据ID查询机房详情
     * 
     * @param id 机房ID
     * @return 机房详情
     */
    ComputerRoomRspVO getComputerRoomById(Long id);

    /**
     * 分页查询机房列表
     * 
     * @param reqVO 分页查询请求VO
     * @return 分页结果
     */
    IPage<ComputerRoomRspVO> getComputerRoomPage(ComputerRoomPageReqVO reqVO);

    /**
     * 查询所有机房选项（用于下拉选择）
     * 
     * @return 机房选项列表
     */
    List<ComputerRoomOptionRspVO> getAllComputerRoomOptions();

    /**
     * 根据城市查询机房选项
     * 
     * @param city 城市名称
     * @return 机房选项列表
     */
    List<ComputerRoomOptionRspVO> getComputerRoomOptionsByCity(String city);

    /**
     * 根据运营商查询机房选项
     * 
     * @param operator 运营商名称
     * @return 机房选项列表
     */
    List<ComputerRoomOptionRspVO> getComputerRoomOptionsByOperator(String operator);

    /**
     * 获取机房统计信息
     * 
     * @return 机房统计信息
     */
    ComputerRoomStatisticsRspVO getComputerRoomStatistics();

    /**
     * 检查机房名称是否已存在
     * 
     * @param name 机房名称
     * @param excludeId 排除的机房ID（用于更新时检查）
     * @return 是否存在
     */
    Boolean checkComputerRoomNameExists(String name, Long excludeId);

    /**
     * 根据名称模糊查询机房
     * 
     * @param name 机房名称关键字
     * @return 机房列表
     */
    List<ComputerRoomRspVO> searchComputerRoomByName(String name);

    /**
     * 获取所有城市列表
     * 
     * @return 城市列表
     */
    List<String> getAllCities();

    /**
     * 获取所有运营商列表
     * 
     * @return 运营商列表
     */
    List<String> getAllOperators();
}
